深入理解C语言的文件【系统编程】

您所在的位置:网站首页 c语言gets 怎么用 深入理解C语言的文件【系统编程】

深入理解C语言的文件【系统编程】

2023-03-16 07:45| 来源: 网络整理| 查看: 265

几个概念:

1.fopen、fclose、fread等都是库函数,而库函数需要被调用系统调用接口调用(下文会介绍的open,close,read等),所以我们可以认为f#系列的函数都是对系统调用的封装,方便二次开发 2.文件存放在磁盘里,磁盘是硬件,想访问硬件只能通过操作系统,所以所有人想访问磁盘,只能使用OS提供的接口,类似于python,c++都有不同的文件操作接口,但是其本质都是封装了调用系统调用 3.文件的操作可以看成是进程和被打开文件的关系(下面会介绍)

我们先复习一下常用的几个文件打开方式

“r”      只读打开一个文本文件,只允许读数据 “w”      只写打开或建立一个文本文件,只允许写数据 “a”      追加打开一个文本文件,并在文件末尾写数据 “rb”      只读打开一个二进制文件,只允许读数据 “wb”       只写打开或建立一个二进制文件,只允许写数据 “ab”       追加打开一个二进制文件,并在文件末尾写数据 “r+”      读写打开一个文本文件,允许读和写 “w+”      读写打开或建立一个文本文件,允许读写 “a+”      读写打开一个文本文件,允许读,或在文件末追加数据 “rb+”      读写打开一个二进制文件,允许读和写 “wb+”      读写打开或建立一个二进制文件,允许读和写 “ab+”      读写打开一个二进制文件,允许读,或在文件末追加数

接口介绍

一、open

man 2 open查看

#include #include #include int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode); pathname: 要打开或创建的目标文件 flags: 打开文件时,可以传入多个参数选项,用下面的一个或者多个常量进行“或”运算,构成flags。 参数: O_RDONLY: 只读打开 O_WRONLY: 只写打开 O_RDWR : 读,写打开 这三个常量,必须指定一个且只能指定一个 O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限 O_APPEND: 追加写返回值: 成功:新打开的文件描述符 失败:-1

这个flag就是位图,所以在我们使用的时候只需要|上各种条件我们就可以实现各种效果 fclose对应close->man 3 close查看

#include #include #include #include #include #include #define FILE_NAME "log.txt" int main() { //这个才对应于C语言的写 int fd=open(FILE_NAME,O_WRONLY|O_CREAT); //失败就返回-1 if(fd显示器 stderr->显示器 image.png 所以我们可以得知C语言的FILE虽然是个结构体,但是里面必定有个字段有文件描述符

printf("stdin->fd:%d\n",stdin->_fileno); printf("stdout->fd:%d\n",stdout->_fileno); printf("stderr->fd:%d\n",stderr->_fileno);

所以证明C语言的FILE*也封装了文件描述符 image.png 回到一开始的概念:.文件的操作可以看成是进程和被打开文件的关系,这张图清楚的展示了这样的关系 image.png



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3